From 73e00707743f04abeedd26d22b12a4fc3d094e88 Mon Sep 17 00:00:00 2001 From: Cosimo Cecchi Date: Fri, 20 May 2011 16:05:57 -0400 Subject: [PATCH] shadow: add a method to paint the shadow for a PangoLayout https://bugzilla.gnome.org/show_bug.cgi?id=649314 --- gtk/gtkshadow.c | 29 +++++++++++++++++++++++++++++ gtk/gtkshadowprivate.h | 7 +++++++ 2 files changed, 36 insertions(+) diff --git a/gtk/gtkshadow.c b/gtk/gtkshadow.c index 1825a87fe4..89702c0a3f 100644 --- a/gtk/gtkshadow.c +++ b/gtk/gtkshadow.c @@ -23,6 +23,7 @@ #include "gtkshadowprivate.h" #include "gtkstylecontext.h" +#include "gtkpango.h" typedef struct _GtkShadowElement GtkShadowElement; @@ -253,3 +254,31 @@ _gtk_shadow_to_string (GtkShadow *shadow) return g_string_free (str, FALSE); } + +void +_gtk_text_shadow_paint_layout (GtkShadow *shadow, + cairo_t *cr, + gdouble x, + gdouble y, + PangoLayout *layout) +{ + GList *l; + GtkShadowElement *element; + + /* render shadows starting from the last one, + * and the others on top. + */ + for (l = g_list_last (shadow->elements); l != NULL; l = l->prev) + { + element = l->data; + + cairo_save (cr); + + cairo_move_to (cr, x + element->hoffset, y + element->voffset); + gdk_cairo_set_source_rgba (cr, &element->color); + _gtk_pango_fill_layout (cr, layout); + + cairo_restore (cr); + } +} + diff --git a/gtk/gtkshadowprivate.h b/gtk/gtkshadowprivate.h index f823911775..846b1d30fa 100644 --- a/gtk/gtkshadowprivate.h +++ b/gtk/gtkshadowprivate.h @@ -25,6 +25,7 @@ #include #include #include +#include G_BEGIN_DECLS @@ -52,6 +53,12 @@ GtkShadow *_gtk_shadow_resolve (GtkShadow *shadow, GtkStyleProperties *props); gboolean _gtk_shadow_get_resolved (GtkShadow *shadow); +void _gtk_text_shadow_paint_layout (GtkShadow *shadow, + cairo_t *cr, + gdouble x, + gdouble y, + PangoLayout *layout); + G_END_DECLS #endif /* __GTK_SHADOW_H__ */ -- 2.30.2